package reflection;

public class test05 {
    static{
        System.out.println("包含main的类被初始化");
    }

    public static void main(String[] args) throws ClassNotFoundException {

        /*
        由于初始化会执行<clinit>()方法，
        所以在每个类中写一个static代码段，判断初始化情况
        */

        /*
        //测试new一个对象和 父类子类初始化
        children children = new children();
        输出：
        包含main的类被初始化
        parent类被初始化
        children类被初始化
         */
        /*
        //测试调用非final的static变量
        System.out.println(children.score);
        输出：
        包含main的类被初始化
        parent类被初始化
        children类被初始化
        0
         */
        /*
        //测试反射
        Class.forName("reflection.children");
        输出：
        包含main的类被初始化
        parent类被初始化
        children类被初始化
         */
        /*
        //测试使用子类引用父类静态变量
        System.out.println(children.pid);
        输出：
        包含main的类被初始化
        parent类被初始化
        2
         */
        /*
        //测试数组
        children[] children = new children[2];
        输出：
        包含main的类被初始化
         */
        /*
        //测试引用常量
        System.out.println(children.cid);
        输出：
        包含main的类被初始化
        1
         */

    }
}

class parent{
    static{
        System.out.println("parent类被初始化");
    }
    static int pid = 2;
}

class children extends parent{
    static{
        System.out.println("children类被初始化");
    }
    static int score = 0;
    static final int cid = 1;
}
